#include <algorithm> // max
#include <cassert>   // assert
#include <cstdio>    // printf,sprintf
#include <cstring>   // strlen
#include <iostream>  // cin,cout
#include <string>    // string类
#include <vector>    // vector类
#include <sstream>
using namespace std;

struct BigInteger {
	typedef unsigned long long LL;

	static const int BASE = 100000000;
	static const int WIDTH = 8;
	vector<int> s;

	BigInteger& clean(){while(!s.back()&&s.size()>1)s.pop_back(); return *this;}
	BigInteger(LL num = 0) {*this = num;}
	BigInteger(string s) {*this = s;}
	BigInteger& operator = (long long num) {
		s.clear();
		do {
			s.push_back(num % BASE);
			num /= BASE;
		} while (num > 0);
		return *this;
	}
	BigInteger& operator = (const string& str) {
		s.clear();
		int x, len = (str.length() - 1) / WIDTH + 1;
		for (int i = 0; i < len; i++) {
			int end = str.length() - i*WIDTH;
			int start = max(0, end - WIDTH);
			sscanf(str.substr(start,end-start).c_str(), "%d", &x);
			s.push_back(x);
		}
		return (*this).clean();
	}

	BigInteger operator + (const BigInteger& b) const {
		BigInteger c; c.s.clear();
		for (int i = 0, g = 0; ; i++) {
			if (g == 0 && i >= s.size() && i >= b.s.size()) break;
			int x = g;
			if (i < s.size()) x += s[i];
			if (i < b.s.size()) x += b.s[i];
			c.s.push_back(x % BASE);
			g = x / BASE;
		}
		return c;
	}
	BigInteger operator - (const BigInteger& b) const {
		assert(b <= *this); // 减数不能大于被减数
		BigInteger c; c.s.clear();
		for (int i = 0, g = 0; ; i++) {
			if (g == 0 && i >= s.size() && i >= b.s.size()) break;
			int x = s[i] + g;
			if (i < b.s.size()) x -= b.s[i];
			if (x < 0) {g = -1; x += BASE;} else g = 0;
			c.s.push_back(x);
		}
		return c.clean();
	}
	BigInteger operator * (const BigInteger& b) const {
		int i, j; LL g;
		vector<LL> v(s.size()+b.s.size(), 0);
		BigInteger c; c.s.clear();
		for(i=0;i<s.size();i++) for(j=0;j<b.s.size();j++) v[i+j]+=LL(s[i])*b.s[j];
		for (i = 0, g = 0; ; i++) {
			if (g ==0 && i >= v.size()) break;
			LL x = v[i] + g;
			c.s.push_back(x % BASE);
			g = x / BASE;
		}
		return c.clean();
	}
	BigInteger operator / (const BigInteger& b) const {
		assert(b > 0);  // 除数必须大于0
		BigInteger c = *this;       // 商:主要是让c.s和(*this).s的vector一样大
		BigInteger m;               // 余数:初始化为0
		for (int i = s.size()-1; i >= 0; i--) {
			m = m*BASE + s[i];
			c.s[i] = bsearch(b, m);
			m -= b*c.s[i];
		}
		return c.clean();
	}
	BigInteger operator % (const BigInteger& b) const { //方法与除法相同
		BigInteger c = *this;
		BigInteger m;
		for (int i = s.size()-1; i >= 0; i--) {
			m = m*BASE + s[i];
			c.s[i] = bsearch(b, m);
			m -= b*c.s[i];
		}
		return m;
	}
	// 二分法找出满足bx<=m的最大的x
	int bsearch(const BigInteger& b, const BigInteger& m) const{
		int L = 0, R = BASE-1, x;
		while (1) {
			x = (L+R)>>1;
			if (b*x<=m) {if (b*(x+1)>m) return x; else L = x;}
			else R = x;
		}
	}
	BigInteger& operator += (const BigInteger& b) {*this = *this + b; return *this;}
	BigInteger& operator -= (const BigInteger& b) {*this = *this - b; return *this;}
	BigInteger& operator *= (const BigInteger& b) {*this = *this * b; return *this;}
	BigInteger& operator /= (const BigInteger& b) {*this = *this / b; return *this;}
	BigInteger& operator %= (const BigInteger& b) {*this = *this % b; return *this;}

	bool operator < (const BigInteger& b) const {
		if (s.size() != b.s.size()) return s.size() < b.s.size();
		for (int i = s.size()-1; i >= 0; i--)
			if (s[i] != b.s[i]) return s[i] < b.s[i];
		return false;
	}
	bool operator >(const BigInteger& b) const{return b < *this;}
	bool operator<=(const BigInteger& b) const{return !(b < *this);}
	bool operator>=(const BigInteger& b) const{return !(*this < b);}
	bool operator!=(const BigInteger& b) const{return b < *this || *this < b;}
	bool operator==(const BigInteger& b) const{return !(b < *this) && !(b > *this);}
};

ostream& operator << (ostream& out, const BigInteger& x) {
	out << x.s.back();
	for (int i = x.s.size()-2; i >= 0; i--) {
		char buf[20];
		sprintf(buf, "%08d", x.s[i]);
		for (int j = 0; j < strlen(buf); j++) out << buf[j];
	}
	return out;
}

istream& operator >> (istream& in, BigInteger& x) {
	string s;
	if (!(in >> s)) return in;
	x = s;
	return in;
}

BigInteger quick(int x, int y)
{
	if (y == 0) {
		BigInteger tmp(1);
		return tmp;
	}
	BigInteger tmp = quick(x, y/2);
	tmp = tmp * tmp;
	BigInteger bx(x);
	if (y & 1) tmp = tmp * bx;
	return tmp;
}

void print(BigInteger const & a, BigInteger const & b)
{
	int len = 500;
	BigInteger great("1" + string(len, '0'));
	BigInteger ans = a * great / b;
	stringstream buf;
	buf << ans;
	string s;
	buf >> s;
	printf("0.");
	for (int i = 0; i < len-s.size(); i++) printf("0");
	int last = s.size()-1;
	for (; last >= 0 &&  s[last] == '0'; last--);
	for (int i = 0; i <= last; i++) printf("%c", s[i]);
	printf("\n");
}

int main()
{
	int T;
	scanf("%d", &T);
	for (int ti = 1; ti <= T; ti++) {
		printf("Case #%d:\n", ti);
		int n;
		scanf("%d", &n);
		vector<BigInteger> v;
		BigInteger t1(0), t2 = quick(2, n);
		v.push_back(t1); v.push_back(t2);

		for (int i = 0, t; i < n; i++) {
			scanf("%d", &t);
			BigInteger b2(2);
			BigInteger tmp = (v[t] + v[t+1])/b2;
			v.insert(v.begin() + t + 1, tmp);

			BigInteger tt = quick(2, n);
			print(tmp, tt);
		}

	}
}
